import itchat
from itchat.content import *

import config
import util

itchat.auto_login()


# 群聊消息自动回复
@itchat.msg_register([TEXT], isGroupChat=True)
def text_reply(msg):

    # print("<<< " + msg['Text'])
    # 白名单，只回复包含在白名单中的群聊，并在@自己时触发
    if msg.isAt:
        if msg['User']['NickName'] in config.white_list:
            if not is_self(msg['FromUserName']):
                if util.is_first_chat(msg['FromUserName']):
                    return config.welcome_world
                else:
                    (is_cmd, code) = is_msg_cmd_group(msg['Text'])
                    if is_cmd:
                        if code == "STOP":
                            return "[Tips] 成功关闭自动回复！\n可发送[start]再次开启"
                        elif code == "START":
                            return "[Tips] 我胡汉三又回来啦！\n可发送[stop]关闭自动回复"
                        else:
                            return reply_group(msg)
                    else:
                        return reply_group(msg)


# 好友消息自动回复
@itchat.msg_register([TEXT, PICTURE, MAP, CARD, NOTE, SHARING, RECORDING, ATTACHMENT, VIDEO], isFriendChat=True)
def text_reply(msg):

    # print("<<< " + msg['Text'])
    if util.is_first_chat(msg['FromUserName']):
        return config.welcome_world
    else:
        if msg['Type'] == "Text":
            (is_cmd, code) = is_msg_cmd(msg['Text'])
            if is_cmd:
                if code == "STOP":
                    return "[Tips] 成功关闭自动回复！\n可发送[start]再次开启"
                elif code == "START":
                    return "[Tips] 我胡汉三又回来啦！\n可发送[stop]关闭自动回复"
                else:
                    return reply_friends(msg)
            else:
                return reply_friends(msg)
        else:
            return reply_other_msg(msg)


# 好友消息
def reply_friends(msg):
    if config.is_reply:
        # 如果发消息的是自己，则不回复
        if is_self(msg['FromUserName']):
            # 此判断满足自己跟自己聊天需求，给文件助手发消息即可
            file_helper = "filehelper"
            if msg['ToUserName'] == file_helper:
                itchat.send_msg(msg=util.get_response(msg), toUserName=file_helper)
            else:
                return
        else:
            return util.get_response(msg)


# 好友消息
def reply_group(msg):
    if config.is_reply:
        return util.get_response(msg)


# 除文本信息之外的 其他消息处理
def reply_other_msg(msg):

    if msg['Type'] == "Picture":
        return "[自动回复] (⊙_⊙)这张图我好像接不了...，亮下一张图吧！"

    elif msg['Type'] == "Video":
        return "[自动回复] 喂~！是110吗？这里有人在发小视频！！管不管咯？"

    elif msg['Type'] == "Sharing":
        return "[自动回复] 这个分享我早就看过了~~哈哈哈~~就问你气不气~"

    elif msg['Type'] == "Map":
        return "[自动回复] 喂！110吗？" + msg['Text'] + "有个妖孽！快去收了它吧！！！"

    else:
        return "[自动回复] 表示不知道你发的是什么鬼~~抓狂ing~！"


# 判断是否自己发送出去的消息
def is_self(user_name):
    friends = itchat.search_friends(nickName=config.nick_name)
    return friends[0]['UserName'] == user_name


# 判断是否停止或开启自动回复命令
def is_msg_cmd(msg):
    if msg == "stop":
        config.is_reply = False
        return True, "STOP"
    elif msg == "start":
        config.is_reply = True
        return True, "START"
    else:
        return False, "NONE"


def is_msg_cmd_group(msg):
    if "stop" in msg:
        config.is_reply = False
        return True, "STOP"
    elif "start" in msg:
        config.is_reply = True
        return True, "START"
    else:
        return False, "NONE"


itchat.run()
